home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / am8068.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  4KB  |  103 lines

  1.  
  2. /*    @(#)am8068.h 1.1 86/09/27 SMI    */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. /*
  9.  * Definitions of the AM Z8068 Data Ciphering Processor chip.
  10.  *
  11.  * This file is used for both standalone code (ROM Monitor, 
  12.  * Diagnostics, boot programs, etc) and for the Unix kernel.  IF YOU HAVE
  13.  * TO CHANGE IT to fit your application, MOVE THE CHANGE BACK TO THE PUBLIC
  14.  * COPY, and make sure the change is upward-compatible.  The last thing we 
  15.  * need is seventeen different copies of this file, like we have with the
  16.  * Sun-1 header files.
  17.  *
  18.  */
  19.  
  20. /*
  21.  * These are the low-order address bits that define    what register is being
  22.  * accessed by the master port of the DES.
  23.  */
  24. #define    DESR_IO        0    /* Register selector for Input & Output regs */
  25. #define    DESR_CMD_STAT    2    /* Register selector for Command & Status */
  26. #define    DESR_MODE    6    /* Register selector for Mode (R/W) reg */
  27.  
  28. /*
  29.  * These commands can be written to the Command register of the DES.
  30.  * Some take 8-byte parameters, which must then be written 
  31.  * to the Input register or read from the Output register.
  32.  *
  33.  * Only a subset of the available commands are defined here; if you need
  34.  * something else, see the data sheet and edit it in here.
  35.  */
  36. #define    DESC_RESET    0x00    /* Reset chip */
  37. #define    DESC_STOP    0xE0    /* Stop en/decrypting */
  38. #define    DESC_START    0xC0    /* Start en/decrpyting depending on mode reg */
  39. #define    DESC_START_DEC    0x40    /* Start decrypting, force mode to decrypt */
  40. #define    DESC_START_ENC    0x41    /* Start encrypting, force mode to encrypt */
  41. #define    DESC_LOAD_E_KEY    0x11    /* Load clear encryption key */
  42. #define    DESC_LOAD_D_KEY    0x12    /* Load clear decrpytion key */
  43.  
  44. /*
  45.  * Status bit masks
  46.  */
  47. #define    DESS_MST_FLAG    0x01    /* Master port busy (MFLG pin) */
  48. #define    DESS_SLAVE_FLAG    0x02    /* Slave port busy (SFLG pin) */
  49. #define    DESS_AUX_FLAG    0x04    /* Aux port busy (AFLG pin) */
  50. #define    DESS_PAR    0x08    /* Parity of last key byte was bad (PAR pin) */
  51. #define    DESS_LPAR    0x10    /* Latched parity-bad bit. */
  52. #define    DESS_BUSY    0x20    /* Chip is enciphering or deciphering things */
  53. #define    DESS_CMD_PEND    0x40    /* Chip awaits data xfer from last cmd */
  54. #define    DESS_STARTED    0x80    /* Start command done since last Stop */
  55.  
  56. /*
  57.  * Mode register bits
  58.  */
  59. /* Cipher type */
  60. #define    DESM_ECB    0x00    /* Electronic Code Book mode */
  61. #define    DESM_CFB    0x01    /* Cipher Feedback mode */
  62. #define    DESM_CBC    0x02    /* Cipher Block Chain mode */
  63. /* Port configuration */
  64. #define    DESM_ME_SC    0x00    /* Master encrypted, Slave clear */
  65. #define    DESM_MC_SE    0x04    /* Master clear, Slave encrypted */
  66. #define    DESM_M_ONLY    0x08    /* Master port only */
  67. /* Encrypt/Decrypt */
  68. #define    DESM_DECRYPT    0x00    /* Decrypt, please. */
  69. #define    DESM_ENCRYPT    0x10    /* Encrypt, please. */
  70.  
  71.  
  72. /*
  73.  * The 8068 on the Sun-2 processor is connected via a kludge interface.
  74.  * The chip expects a multiplexed bus, which we do not have, since we run
  75.  * 68000's.  It latches address information from the data bus with one
  76.  * strobe, then later reads or writes data with another strobe.  We must
  77.  * fake this in software since our hardware does not multiplex the data
  78.  * bus to this chip.  Thus, to touch a register in the DES we must first
  79.  * write a byte containing the address bits to one 68000 address, then
  80.  * read or write the actual data to another 68000 address.  Sort of like
  81.  * all the stupid UARTs in the world.  Like the UARTs, we can't read back
  82.  * the pointer value -- it's invisible state information.
  83.  *
  84.  * Example:  To write a command to the chip:
  85.  *     struct deschip *dp;
  86.  *    dp->d_selector = DESR_CMD_STAT;    /* Determine which reg to touch * /
  87.  *    dp->d_reg = DESC_RESET;        /* Write to command register * /
  88.  * The selector need not be reloaded for each access if its value would be
  89.  * the same (eg, accessing the same register or the Read instead of Write
  90.  * register of the pair).
  91.  *
  92.  * 6 DES clock cycles (2400ns) must pass after each write to the
  93.  * mode register or reset of the chip.  There is no timing requirement
  94.  * on other accesses, though.
  95.  */
  96. struct deschip {
  97.     unsigned char    d_reg;            /* value -- read or write */
  98.     unsigned char            :8;
  99.     unsigned char    d_selector;        /* Address of reg -- wr only */
  100.     unsigned char            :8;
  101. };
  102.  
  103.